图的存储结构可以用邻接矩阵或者邻接表来表示,对于n个顶点和e条边的无向网图,采用邻接矩阵创建时,其时间复杂度为O(n+n^2+e),深度优先算法遍历时间复杂度为O(n^2);采用邻接表创建时,其时间复杂度为O(n+e),深度优先算法遍历时间复杂度为O(n+e)。以下是两种方式的代码实现。
#include<iostream>
#define INF 65535
#define MAXVEX 100
#define TRUE 1
#define FALSE 0
using namespace std;
typedef int VertexType;
typedef int EdgeType;
typedef int Boolean;
Boolean visited[MAXVEX];
typedef struct {
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numVertexs, numEdges;
}MGraph;
void CreateMGraph(MGraph *G)
{
int i, j, k, w;
printf("输入顶点数和边数:\n");
cin>>G->numVertexs>>G->numEdges;
printf("输入顶点:\n");
for (i = 0; i < G->numVertexs; ++i)
cin>>G->vexs[i];
for (i = 0; i < G->numVertexs; ++i)
for (j = 0; j < G->numVertexs; ++j) {
if(i==j)
G->arc[i]